
%!TEX program = xelatex
%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode

\documentclass[10pt]{article} 

\input{wang_preamble.tex}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%文档的题目、作者与日期
\author{王立庆（2022级数学与应用数学1班）}
\title{应用数学前沿专题：教案}
%\date{\vspace{-3ex}}
%\renewcommand{\today}{\number\year \,年 \number\month \,月 \number\day \,日}
\date{2024年6月25日 - 7月4日}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\maketitle

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\setcounter{tocdepth}{1}
\renewcommand\contentsname{目录}
\tableofcontents



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\setcounter{section}{2}
%\renewcommand\thesection{ 第 \arabic{section} 章：}
%\renewcommand\thesection{\arabic{section}}

\section{Python 简明教程} %第3章：

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{学习目标}
\begin{itemize}
\item 理解 Python 的对象、标识符、数值类型、名称空间和类的概念。
\item 学会使用列表、元组、字符串、字典等容器对象。
\item 学会使用判断语句和循环语句。
\item 读懂函数的程序结构。

\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{课堂练习与讲解}
\begin{enumerate}

\item  %1
An object may be thought of as a region of computer memory containing both some data and information associated with those data.  For a simple object, this information consists of its type and its \_\_\_\_\_\_\_\_, i.e., the location in memory, which is of course machine dependent. 

\begin{enumerate}
\item[A.] identifier
\item[B.] identity
\item[C.] object
\item[D.] integer
\end{enumerate}

解答：B. 
一个对象可以被认为是计算机的一个内存区域，包含某种数据以及与数据的相关信息。这些信息包括这个对象的类型和标识。标识就是这个对象在内存中的位置，标识与这台计算机有关。

\item  %2
The identity is the location in memory, which is of course machine dependent. Therefore of no interest for most users. They need a machine-independent method for accessing objects. This is provided by an \_\_\_\_\_\_\_\_, a label which can be attached to objects. It is made up of one or more characters. 

\begin{enumerate}
\item[A.] identifier
\item[B.] identity
\item[C.] object
\item[D.] integer
\end{enumerate}

解答：A. 
对象的标识是这个对象在计算机内存中的位置，与计算机有关。标识符是附加到对象上的一个标签，由字母、下划线和数字组成。


\item  %3
While Python is running, it needs to keep a list of those identifiers which have been assigned to objects. This list is called a namespace, and as a Python object it too has an identifier. For example, while working in the interpreter, the namespace has the unmemorable name \_\_\_\_\_\_\_\_. 

\begin{enumerate}
\item[A.]  \_\_foo\_\_
\item[B.] \_\_module\_\_
\item[C.] \_\_main\_\_
\item[D.] \_\_name\_\_
\end{enumerate}

解答：C. 
当Python正在运行时，它需要保存已分配给对象的那些标识符组成的列表，这个列表被称为名称空间。当在解释器里工作时，名称空间的名称是\_\_main\_\_.

\item  %4
Most programming languages provide container objects, often called arrays, which can store large numbers of objects of the same type, and retrieve them via an indexing mechanism. It may come as a surprise to find that the Python core language has no array concept. Instead, it has container objects which are much more general, lists, tuples, strings and \_\_\_\_\_\_\_\_. 

\begin{enumerate}
\item[A.]  ndarrays
\item[B.]  matrices
\item[C.]  data frames
\item[D.]  dictionaries
\end{enumerate}

解答：D. 
Python核心语言没有数组的概念。Python核心语言的通用的容器对象是列表（list）、元组（tuple）、字符串（string）和字典（dictionary）。

\item  %5
Classes are extremely versatile structures in Python. The basic idea is that you may have a fixed data structure or object which occurs frequently, together with operations directly associated with it. The Python class encapsulates both the object and its \_\_\_\_\_\_\_\_. 

\begin{enumerate}
\item[A.]  operations
\item[B.]  instances
\item[C.]  comments
\item[D.]  data
\end{enumerate}

解答：A. 
程序员可能拥有经常出现的数据结构或对象。Python的类（class）既封装对象又封装其操作。


\item  %6
Run the programs carrying out the Sieve of Eratosthenes. Find the 100th prime number. Assume the first prime number is 2. 

\begin{enumerate}
\item[A.]  523
\item[B.]  541
\item[C.]  547
\item[D.]  557
\end{enumerate}

解答：B. 
\begin{python}
s1000=sieve_v1(1000)
mys=s1000[1]
mys[0]
mys[99]
\end{python}

\end{enumerate}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
%\setcounter{section}{0}

\section{Numpy 模块} %第4章：

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{学习目标}
\begin{itemize}
\item  学会构造与操作 Numpy 的一维数组和二维数组。
\item  学会内部和外部的输入输出的方法。
\item  学会一些通用的函数和多项式的计算。
\item  学会有关线性代数的一些计算。
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{课堂练习与讲解}
\begin{enumerate}

\item  %7
运行下述程序，下述说法中，不正确的是哪个？

\begin{python}
import numpy as np
x=np.linspace(0,1,11,endpoint=True)
y=np.arange(0,1,0.1)
z=np.zeros(10,dtype=float)
w=np.array([1.0, 2.0, 3, 2, 1])
\end{python}

\begin{enumerate}
\item[A.]  变量 x 是 numpy 模块的一维数组，长度为11。
\item[B.]  变量 y 是 numpy 模块的一维数组，长度为10。
\item[C.]  变量 z 是 numpy 模块的一维数组，它的每个分量为浮点型数据。
\item[D.]  变量 w 是 numpy 模块的一维数组，它的分量有的是浮点型，有的是整数型。
\end{enumerate}

解答：D. 
经过运行验证，变量 w 的分量都成了浮点型。

\item  %8
运行下述程序，下述说法中，不正确的是哪个？

\begin{python}
import numpy as np
x=np.linspace(-10,10,101)
choice=[x>=5, x>=0, x>=-5, x<-5]
outcome=[1,2,3,4]
y=np.select(choice,outcome)
print(sum(y))
import matplotlib.pyplot as plt
plt.plot(x,y,'-')
\end{python}

\begin{enumerate}
\item[A.]  变量 choice 是一个列表，包含4个分量，每个分量也都是列表。
\item[B.]  变量 choice 是一个列表，包含4个分量，每个分量都是整数。
\item[C.]  变量 y 是 numpy 的一维数组，它的分量总和是 251. 
\item[D.]  随着 x 的增加，y 的值也在增加。
\end{enumerate}

解答：D. 
从图像可以看出，变量 y 关于变量 x 是单调递减（不是严格递减）的阶梯函数。

\item  %9
运行下述程序，选出不正确的说法。
\begin{python}
import numpy as np
B1=[1,2,3]
B2=[4,5,6]
B3=[7,8,9]
B=np.array([B1,B2,B3])
print(np.ndim(B))
print(B)
print(B[1])
print(B[1][2])
print(B[:,1])
\end{python}

\begin{enumerate}
\item[A.]  变量 B 是 numpy 的二维数组。
\item[B.]  变量 B 的切片 B[1] 的结果是 [1,2,3].
\item[C.]  变量 B 的切片 B[1][2] 的结果是 6.
\item[D.]  变量 B 的切片 B[:,1] 的结果是 [2,5,8].
\end{enumerate}

解答：B. 
python从0开始计数。显示切片 B[1] 的结果是 [4,5,6].



\item  %10
运行下述程序，选出不正确的选项。

\begin{python}
import numpy as np
x=np.linspace(-2,2,11)
y=np.linspace(-2,2,11)
[xa,ya]=np.meshgrid(x,y)
za=abs(xa)+abs(ya)
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_subplot(221)
ax.contour(xa,ya,za)
bx=fig.add_subplot(222)
bx.contour(xa,ya,za)
plt.imshow(za)
cx=fig.add_subplot(223)
plt.imshow(xa)
dx=fig.add_subplot(224)
plt.imshow(ya)
\end{python}

\begin{enumerate}
\item[A.]  变量 x 是 numpy 的一维数组，包含11个分量。
\item[B.]  变量 xa 是 numpy 的二维数组。
\item[C.]  变量 za 是 numpy 的二维数组，它的所有分量的总和是265.
\item[D.]  程序最后画出四个图像，第一个为函数z=|x|+|y|的等值线。
\end{enumerate}

解答：C. 
变量 za 的所有分量的总和是264. 


\item. %11
使用 numpy.linalg 的 solve 函数，求解线性方程组 
\begin{eqnarray*}
\begin{pmatrix} 3&2 \\ 4&3 \end{pmatrix}
\begin{pmatrix}  x_1 \\ x_2 \end{pmatrix} = 
\begin{pmatrix} 3 \\ 2 \end{pmatrix}. 
\end{eqnarray*}

\begin{enumerate}
\item[A.]  [1, -2].
\item[B.]  [3, -4].
\item[C.]  [5, -6].
\item[D.]  [7, -8].
\end{enumerate}

解答：C. 
把方程中的矩阵写成 numpy 里的二维数组，编写程序如下。
\begin{python}
import numpy as np
import numpy.linalg as npl
A=np.array([[3,2],[4,3]])
B=np.array([[3],[2]])
X=npl.solve(A,B)
print(X)
\end{python}


\item  %12
设 $A$ 是一个10阶的方阵，设它的第 $(i,j)$ 元素为 $i$ 与 $j$ 的差的绝对值，即 $A(i,j)=|i-j|$. 
编程计算 $A$ 的行列式的值。

\begin{enumerate}
\item[A.]  $3024$.
\item[B.]  $-3024$.
\item[C.]  $2304$. 
\item[D.]  $-2304$.
\end{enumerate}

解答：D. 
使用两重循环，编写下述程序，计算可得。
\begin{python}
import numpy as np
import numpy.linalg as npl
A=np.zeros([10,10])
for m in range(10):
    for n in range(10):
        A[m,n]=abs(m-n)
print(A)
print(npl.det(A))
\end{python}


\item  %13
找出一个二次多项式，来拟合下述计算得到的自变量x和应变量y.

\begin{python}
import numpy as np
x=np.linspace(0,2,11)
y=np.exp(x)-1
import matplotlib.pyplot as plt
plt.plot(x,y,'-o')
\end{python}

\begin{enumerate}
\item[A.]  $0.13x^2+0.10x+1.48$. 
\item[B.]  $1.48x^2+0.10x+0.13$. 
\item[C.]  $0.13x^2+1.48x+0.10$. 
\item[D.]  $1.48x^2+0.13x+0.10$. 
\end{enumerate}

解答：B. 
使用numpy的polyfit函数，即可求得拟合多项式的系数。
\begin{python}
c=np.polyfit(x,y,2)
print('%.2f x^2 + %.2f x + %.2f' %(c[0],c[1],c[2]))
y2=c[0]*x**2 + c[1]**x + c[2]
plt.plot(x,y2,'r--')
\end{python}


\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
%\setcounter{section}{0}

\section{二维图形} %第5章：

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{学习目标}
\begin{itemize}
\item  理解Matplotlib 的面向对象的编程方式。 
\item  学会 Matplotlib 的基本绘图函数，设置曲线样式、标记样式、坐标轴、标签和标题。
\item  学会显示文本与数学公式。
\item  学会绘制等高线图和复合图形。
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{课堂练习与讲解}
\begin{enumerate}

\item  %14
This is a schematic figure produced by Matplotlib. Which one is incorrect? 

\begin{figure}[ht!]
\centering
\includegraphics[height=4cm, width=6cm]{exercise-14.png}
\end{figure}

\begin{enumerate}
\item[A.]  The totality is a Figure class instance. 
\item[B.]  This Figure class contains two Axes class instances. 
\item[C.]  Each Axes class instance contains an x-axis and a y-axis. 
\item[D.]  An Axes class instance in Python is what an artist would call his 'canvas'. 
\end{enumerate}

解答：D. 
A Figure class instance in Python is what an artist would call his 'canvas'.


\item  %15
运行下列程序，选出不正确的选项。
\begin{python}
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure()
ax1=fig.add_subplot(121)
x=np.linspace(0,1,21)
y=6*x**3-9*x**2+4*x
ax1.plot(x,y,'b-')
ax2=fig.add_subplot(122)
x=np.array([1,2,3,4,5])
y=np.array([3,2,5,4,1])
ax2.plot(x,y,'r--')
\end{python}

\begin{enumerate}
\item[A.]  对象 fig 是一个 Figure 对象的实例。
\item[B.]  对象 ax1 和 ax2 是 AxesSubplot 对象的两个实例。
\item[C.]  键入ax. 然后按下Tab键将显示这个对象可以使用的300多种方法。
\item[D.]  图形最后显示左右两个子图。
\end{enumerate}

解答：C. 
这里只有 plt, fig, x, y, ax1 和 ax2 这几个对象，没有 ax 这个对象。


\item  %16
运行下述程序，选出不正确的选项。
\begin{python}
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_subplot(111)
[X,Y]=np.mgrid[-5:5:51j,-6:6:61j]
Z=X**3-Y**3
curves=ax.contour(X,Y,Z,12,colors='b')
ax.clabel(curves)
fig.suptitle(r'The level contours of $z=x^2-y^2$',fontsize=20)
\end{python}

\begin{enumerate}
\item[A.]  函数 np.mgrid 生成了两个二维数组，分别存储了一个矩形区域的格点的横坐标和纵坐标。
\item[B.]  对象 ax 的数据类型是 matplotlib.figure.Figure. 
\item[C.]  函数 plt.contour 画出等高线图，并返回等高线的有关信息。
\item[D.]  函数 plt.clabel 给每条等高线标注函数值。
\end{enumerate}

解答：B. 
对象 ax 的数据类型是 matplotlib.axes.\_subplots.AxesSubplot. 


\item  %17
阅读下述程序，选出不正确的选项。
\begin{python}
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
theta=np.linspace(0,2*np.pi,101)
a=0.3; m=11; n=9
x=(1+a*np.cos(n*theta))*np.cos(m*theta)
y=(1+a*np.cos(n*theta))*np.sin(m*theta)
z=a*np.sin(n*theta)
fig=plt.figure()
ax=Axes3D(fig)
ax.plot(x,y,z,'g',linewidth=2)
ax.set_zlim3d(-1.0,1.0)
ax.set_xlabel('x'); ax.set_ylabel('y'); ax.set_zlabel('z')
ax.set_title('A spiral as a parametric curve',weight='bold',size=16)
ax.elev, ax.azim = 60, -120
\end{python}

\begin{enumerate}
\item[A.]  mpl\_toolkits 是独立于 matplotlib 的一个绘图包。
\item[B.]  对象 fig 是 matplotlib 的 Figure 类的一个实例。
\item[C.]  对象 ax 是 Axes3D 类的一个实例。
\item[D.]  函数 Axes3D.plot 可以绘制二维和三维图形。
\end{enumerate}

解答：A. 
mpl\_toolkits 是包含在 matplotlib 里的一个绘图包。


\item  %18
运行下述程序，选出不正确的选项。
\begin{python}
import numpy as np
x,y=np.ogrid[-1.5:0.5:11j,-1.0:1.0:11j]
z=x+1j*y
julia=np.zeros(z.shape)
c=-0.7-0.4j
for it in range(1,11):
    z=z**2+c
    escape=abs(z)>2
    julia+=(1/float(it))*escape
import matplotlib.pyplot as plt
plt.imshow(julia)
\end{python}

\begin{enumerate}
\item[A.]  对象 z 是一个阶数为11乘以11的二维数组，其中的每个分量为复数。
\item[B.]  对象 julia 是一个阶数为11乘以11的二维数组，其中的每个分量为浮点型数据。
\item[C.]  对象 escape 是一个阶数为11乘以11的二位数组，其中的每个分量为逻辑型数据。
\item[D.]  程序运行结束后，对象 it 的值为11.
\end{enumerate}

解答：D. 
程序运行结束后，对象 it 的值为10. 函数 range(11) 返回的是对0,1,2,..,10进行遍历。


\item  %19
称复数 $c$ 是 Mandelbrot 集合中的点，如果数列 $$z_0=c, z_{n+1}=z_n^2+c, n=0,1,2,\cdots$$ 是有界的。
设 $c$ 不是 Mandelbrot 集合中的点。设 $N$ 是使得 $|z_N(c)|>2$ 的最小的正整数。
称这个 $N$ 为 $c$ 的逃逸参数。本题编程计算 $c=-1+0.3j$ 的逃逸参数。

\begin{enumerate}
\item[A.]  34
\item[B.]  35
\item[C.]  134
\item[D.]  135
\end{enumerate}

解答：A. 
编写一个循环语句，每次判断这个数列的下一项的模长是否大于2.
\begin{python}
c=-1+0.3j
z=c
count=0
while (abs(z)<=2) and (count<1000):< p="">
    z=z**2+c
    count=count+1
print(count)
\end{python}

另一种计算，直接写出这个数列。
\begin{python}
c=-1+0.3j
z=c
for k in range(50):
    if abs(z)<100:< p="">
        print('%d : %5.2f + %5.2f j , norm: %5.2f.' %(k,z.real,z.imag,abs(z)) )
    else:
        break
    z=z**2+c
print(z)
\end{python}

\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
%\setcounter{section}{0}

\section{多维图形} %第6章：

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{学习目标}
\begin{itemize}
\item  了解数据降维的方法。
\item  了解一些可视化软件。
\item  学会孤立波的交互式作图与动画作图。
\item  学会三维曲线与曲面的作图。
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\subsection{本章练习}
%\begin{enumerate}
%
%\item  %
%
%
%
%
%\end{enumerate}
%
%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
%\setcounter{section}{0}

\section{SymPy 模块} %第7章：

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{学习目标}
\begin{itemize}
\item 了解一些计算机代数系统。了解Sympy模块的基本知识。
\item  学会矩阵和向量的计算。学会初等微积分的计算。
\item  学会符号表达式的化简。学会线性方程组符号求解。学会常微分方程符号求解。
\item  学会用 Sympy 作图。
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{课堂练习与讲解}
\begin{enumerate}

\item  %20
下述哪个不是计算机代数系统？

\begin{enumerate}
\item[A.]  Reduce 和 Maxima. 
\item[B.]  Maple 和 Mathematica. 
\item[C.]  Matplotlib 和 Mayavi.
\item[D.]  Sage 和 SymPy. 
\end{enumerate}

解答：C. 
Matplotlib 和 Mayavi 是擅长图形处理的程序包。

\item  %21
运行下述程序，选出不正确的说法。
\begin{python}
import sympy as sy
x,y=sy.symbols('x y')
D=sy.Matrix([[x,1],[1,y]])
print(D.det())
\end{python}

\begin{enumerate}
\item[A.]  程序第1行载入计算机代数模块 sympy. 
\item[B.]  程序第2行定义了两个符号x与y. 
\item[C.]  程序第3行定义了符号D, 它是sympy的Matrix类的一个实例。
\item[D.]  程序第4行计算了矩阵D的行列式值，得到1-xy. 
\end{enumerate}

解答：D. 
矩阵D的行列式的值是 $xy-1$. 

\item  %22
运行下列程序，选出不正确的说法。
\begin{python}
import sympy as sy
x,y=sy.symbols('x y')
D=2*x*y+4*x+6*y+1
xD=sy.Integral(D,x)
xE=sy.integrate(D,(x,0,1))
Dx=sy.Derivative(D,x)
print('The expression D = {}.'.format(D))
print('The integral of D with respect to x is {}.'.format(xD.doit()))
print('The derivative of D with respect to x is {}.'.format(Dx.doit()))
print('The integral of D with respect to x from 0 to 1 is {}.'.format(xE))
\end{python}

\begin{enumerate}
\item[A.]  符号D是符号x与y的一个多项式。
\item[B.]  符号xE是符号D对符号x从0到1的定积分，在运行xE.doit()之后可以算出结果。
\item[C.]  符号xD是符号D对符号x的不定积分，在运行xD.doit()之后可以算出结果。
\item[D.]  符号Dx是符号D对符号x的导数，在运行Dx.doit()之后可以算出结果。
\end{enumerate}

解答：B. 
xE不需要运行doit()已经得出结果。

\item  %23
运行下述程序。
\begin{python}
import sympy as sy
x=sy.symbols('x')
eqn=x**3+x-1
xr=sy.roots(eqn)
print(xr)
\end{python}

下述四个说法中，正确的有几句？
\begin{enumerate}
\item[(1)] x是一个符号变量。
\item[(2)] eqn是一个符号表达式。
\item[(3)] roots是sympy模块的符号计算求根的一个函数。
\item[(4)] xr是一个字典型数据。
\end{enumerate}

\begin{enumerate}
\item[A.]  1句。
\item[B.]  2句。
\item[C.]  3句。
\item[D.]  4句。
\end{enumerate}

解答：D. 
这四句话都是正确的。


\item  %24
运行下述程序。
\begin{python}
import sympy as sy
x,y=sy.symbols('x y')
eqns=[x+y-4, x-2*y-1]
outcome=sy.linsolve(eqns,[x,y])
print(outcome)
type(outcome)
\end{python}

下述四句话中，正确的有几句？
(1)变量eqns是一个列表，它的两个分量都是符号表达式。
(2)变量outcome是一个sympy模块的有限集合。
(3)这段代码的求解了一个线性方程组。
(4)这个线性方程组的解是x=3,y=1.

\begin{enumerate}
\item[A.]  1句。
\item[B.]  2句。
\item[C.]  3句。
\item[D.]  4句。
\end{enumerate}

解答：D. 
都是正确的。


\item  %25
使用sympy模块求微分方程 $f'(x) + f(x) + 2\sin(x)=0$ 的通解。

\begin{enumerate}
\item[A.]  $f(x) = C\exp(-x) -\sin(x) +\cos(x)$. 
\item[B.]  $f(x) = C\exp(-x) +\sin(x) +\cos(x)$. 
\item[C.]  $f(x) = C\exp(-x) -\sin(x) -\cos(x)$. 
\item[D.]  $f(x) = C\exp(-x) -\sin(x) -\cos(x)$. 
\end{enumerate}

解答：A. 
\begin{python}
import sympy as sy
x=sy.symbols('x')
f=sy.symbols('f',cls=sy.Function)
from sympy.solvers import dsolve
myode=f(x).diff(x,1)+f(x)+2*sy.sin(x)
mysolution=dsolve(myode,f(x))
mysolution
\end{python}


\end{enumerate}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
%\setcounter{section}{0}

\section{常微分方程} %第8章：

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{学习目标}
\begin{itemize}
\item 学会使用Python 求解一些常微分方程的初值问题和边值问题。
\item 了解延迟微分方程的模型与数值求解。
\item 了解随机微分方程模型的基本理论。
\item 学会随机微分方程的数值求解，EM方法和Milstein方法。
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{本章练习}
\begin{enumerate}

\item  %1
对于微分方程的初值问题 $\frac{dy}{dt}=f(t,y), y(t_0)=y_0$, 下述哪个是前向欧拉方程？
\begin{enumerate}
\item[A.]  $Y_{n+1} = Y_n + hf(t_n,Y_n)$. 
\item[B.]  $Y_{n+1} = Y_n + hf(t_n,Y_{n+1})$. 
\item[C.]  $Y_{n+1} = Y_n + hf(t_{n+1},Y_n)$. 
\item[D.]  $Y_{n+1} = Y_n + hf(t_{n+1},Y_{n+1})$. 
\end{enumerate}

解答：A. 
前向欧拉方程是用上一时刻的函数值来估计下一时刻的函数值。

\item  %2
考虑初值问题 $\frac{dy}{dt}=y+t, y(0)=1$. 下述程序用数值方法计算出函数值 $y(1)=3.4365$. 请问函数值 $y(2)$ 是多少？
\begin{python}
import numpy as np
from scipy.integrate import odeint
f=lambda y,t: y+t
result=odeint(f,1,[0,1])
print(result)
\end{python}

\begin{enumerate}
\item[A.]  11.778.
\item[B.]  12.778.
\item[C.]  13.778.
\item[D.]  14.778.
\end{enumerate}

解答：A. 
修改代码即得：
\begin{python}
result2=odeint(f,1,[0,1,2])
print(result2)
\end{python}
本题的微分方程也可以直接求解，通解为 $y = -t-1+ce^t$.

\item  %3
记变量代换 $\left\{\begin{array}{rcl} u &=& x^2-y^2 \\ v &=& 2xy \end{array}\right.$ 的雅可比矩阵为 $J(x,y)$, 求雅可比行列式 $|J(x,y)|$ 在点 $(x,y)=(1,2)$ 的值。

\begin{enumerate}
\item[A.]  4.
\item[B.]  8.
\item[C.]  16.
\item[D.]  20. 
\end{enumerate}

解答：D. 
按照雅克比矩阵的定义，计算可得 $J(x,y)=\begin{bmatrix} u_x & u_y \\ v_x & v_y \end{bmatrix} = \begin{bmatrix} 2x & -2y \\ 2y & 2x \end{bmatrix}$. 

计算行列式可得 $|J(x,y)|=4x^2+4y^2$.代入点可得 $|J(1,2)|=20$. 提问：雅克比矩阵的几何意义是什么？

\item  %4
下述代码定义了一个函数，
\begin{python}
def g(x,y):
    return [x-y[1],x+y[0]]
\end{python}

下述调用这个函数，正确的是哪个？
\begin{enumerate}
\item[A.]  g(1,2,3)
\item[B.]  g(1,[2,3])
\item[C.]  g([1,2],3)
\item[D.]  g([1,2,3])
\end{enumerate}

解答：B. 
注意到参数y有两个分量。

\item  %5
考虑范德波尔方程 $y''-(1-y^2)y'+y=0$, 设初始条件为 $y(0)=1, y'(0)=1$. 
使用 scipy.integrate 模块的 odeint 函数，求出数值解。特别地，$y(1)$ 等于多少？
\begin{enumerate}
\item[A.]  1.1985
\item[B.]  1.2985
\item[C.]  1.3985
\item[D.]  1.4985
\end{enumerate}

解答：B. 
\begin{python}
import numpy as np
from scipy.integrate import odeint
np.set_printoptions(precision=4, suppress=True)
def rhs(z,t):
    return [ z[1], (1-z[0]**2)*z[1]-z[0] ]
t=np.linspace(0,1,11)
y0=np.array([1,1])
y=odeint(rhs,y0,t)
import matplotlib.pyplot as plt
plt.plot(y[:,0],y[:,1],'bo-')
\end{python}


\item  %6
考虑洛伦兹方程 $x' = \sigma(y-x), y'=\rho x - y -xz, z'=xy-\beta z$. 设 $\sigma=10,\rho=28, \beta=3$. 其原点之外的平衡点在哪里？

\begin{enumerate}
\item[A.]  $(x,y,z)=(9,9,27)$. 
\item[B.]  $(x,y,z)=(9,9,81)$. 
\item[C.]  $(x,y,z)=(3,3,9)$. 
\item[D.]  $(x,y,z)=(3,3,27)$. 
\end{enumerate}

解答：A. 
令 $x'=0,y'=0,z'=0$, 求解可得 $(x,y,z)=(0,0,0)$ 或 $(9,9,27)$. 


\item  %7
考虑微分方程 $\frac{d^2u}{dx^2}=-\frac{u(x)}{4}$, 以及在两点给定的函数值 $u(0)=0, u(\pi)=1$. 下述哪个函数满足这个两点边值问题？

\begin{enumerate}
\item[A.]  $u=\sin(x)$. 
\item[B.]  $u=\cos(x)$.
\item[C.]  $u=\sin(x/2)$. 
\item[D.]  $u=\cos(x/2)$.
\end{enumerate}

解答：C. 
这是线性微分方程，直接求出通解 $u=c_1\sin(x/2)+c_2\cos(x/2)$, 代入两点的边值，即可求得存在唯一解。


\item  %8
考虑线性微分方程 $y''(x)+h(x)y(x)=0, 0<x<1$. 设边值条件为 $y(0)=A, y(1)=B$. 打靶法的思路是先求解两个初值问题：
\begin{eqnarray*}
y_1''(x)+h(x)y_1(x) &=&0, \,\,\,\, x>0, y_1(0)=1, y_1'(0)=0, \\ 
y_2''(x)+h(x)y_2(x) &=& 0, \,\,\,\, x>0, y_2(0)=0, y_2'(0)=1.
\end{eqnarray*}

然后设两点边值问题的解为 $y(x) = c_1y_1(x)+c_2y_2(x)$. 为确定其中的 $c_1,c_2$, 下述说法中，不正确的是哪个？

\begin{enumerate}
\item[A.]  代入 $y(0)=A$ 可得 $c_1=A$. 
\item[B.]  当 $y_2(1)\neq 0$ 时，可得 $c_2 = \frac{B-Ay_1(1)}{y_2(1)}$.
\item[C.]  当 $y_2(1)=0$ 时，若 $Ay_1(1)=B$ 则有无穷多解。
\item[D.]  当 $y_2(1)=0$ 时，若 $Ay_1(1)\neq B$ 则有唯一解。
\end{enumerate}

解答：D. 
当 $y_2(1)=0$ 时，若 $Ay_1(1)\neq B$ 则无解，因为此时从右端边界条件得到一个矛盾方程。


\item  %9
考虑布拉图方程 $u''(x)+\lambda e^{u(x)}=0$. 设边值条件为 $u(0)=0, u(1)=0$. 设参数 $\lambda =1$. 求 $u(x)$ 的两个数值解。
特别地，$u(1/2)$ 的值等于多少？
\begin{enumerate}
\item[A.]  0.14, 4.09
\item[B.]  0.24, 4.19
\item[C.]  0.34, 4.29
\item[D.]  0.44, 4.39
\end{enumerate}

解答：A. 
\begin{python}
import numpy as np
def fun(x, y):
    return np.vstack((y[1], -np.exp(y[0])))
def bc(ya, yb):
    return np.array([ya[0], yb[0]])
x = np.linspace(0, 1, 5)
y_a = np.zeros((2, x.size))
y_a[0]=0
#y_a[0]=3
y_a[1]=0
from scipy.integrate import solve_bvp
res_a = solve_bvp(fun, bc, x, y_a)
x_plot = np.linspace(0, 1, 15)
y_plot_a = res_a.sol(x_plot)[0]
import matplotlib.pyplot as plt
plt.plot(x_plot, y_plot_a, 'bo-', label='y_a')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
np.set_printoptions(precision=4, suppress=True)
print(y_plot_a[7])
\end{python}


\item  %10
设 $\tau>0$ 是一个常数。延迟微分方程 $x'(t)=x(t-\tau), t\ge 0$ 的初始条件是什么样的？

\begin{enumerate}
\item[A.]  $x(0)=x_0$. 
\item[B.]  $x(\tau)=x_0$. 
\item[C.]  $x(t)=x_0(t),\,\,\, -\tau\le t\le 0$. 
\item[D.]  $x(t)=x_0(t),\,\,\, 0\le t\le \tau$. 
\end{enumerate}

解答：C. 
延迟微分方程反映了当前状态 $x(t)$ 需要延迟一段时间 $\tau$, 才能影响到这个微分方程模型中的导函数 $x'(t+\tau)$ 那项。


\item  %11
考虑延迟微分方程 $x'(t)=x(t-1), t>0$, 设初始条件为 $x(t)=1, -1\le t\le 0$. 求其精确解。特别地，$x(2)$ 的值是多少？
\begin{enumerate}
\item[A.]  $3/2$. 
\item[B.]  $5/2$.
\item[C.]  $7/2$.
\item[D.]  $9/2$. 
\end{enumerate}

解答：C. 
当 $t\in [-1,0]$ 时，$x(t)=1$. 这是初始条件。由此求解方程，可得当 $t\in (0,1]$ 时，$x(t)=1+t$. 
由此再求解方程，可得当 $t\in (1,2]$ 时，$x(t)=(3+t^2)/2$. 代入 $t=2$ 得到 $x(2)=7/2$. 


\item  %12
考虑 Mackey-Glass 时滞微分方程 $\frac{dx}{dt} = f(t,x)=\frac{ax(t-\tau)}{1+x(t-\tau)^m} - bx(t)$, 其中 $a,b,\tau,m$ 是非负常数。对 $-\tau\le t\le 0$, 设有初始值 $x(t)=x_0$. 使用一阶欧拉方法 $x_{i+1}=x_i+hf(t_i,x_i)$, 编程实现上述方程的数值解。
设 $a=2,b=1,\tau=5,m=7,h=0.1,x_0=0.5,-5\le t\le 100$. 则 $x(100)$ 等于多少？

\begin{enumerate}
\item[A.]  1.04
\item[B.]  1.24
\item[C.]  1.44
\item[D.]  1.64
\end{enumerate}

解答：A. 
\begin{python}
import numpy as np
import matplotlib.pyplot as plt
tau=5; t_final=100; h=0.1; d=50; m=7
x_initial=0.5; a=2; b=1
N=(t_final+tau)*10+1
t=np.linspace(-tau,t_final,N)
x=np.zeros_like(t)
x[0:d+1]=x_initial
u=np.zeros_like(t)
s=np.zeros_like(t)
for k in range(d,len(t)-1):
    s[k]=a*x[k-d]/(1+x[k-d]**m)-b*x[k]
    x[k+1]=x[k]+h*s[k]
plt.plot(t,x,'b--')
\end{python}


\item  %13
设 $W(t), t\in [0,T]$ 是维纳过程，下述说法中，正确的有多少句？
\begin{enumerate}
\item[(1)] $W(0)=0$ 的概率是1.
\item[(2)] 增量 $W(t+s)-W(t)$ 是正态分布的随机变量，其均值为零，方差与 $s$ 成正比。
\item[(3)] 在不重叠的时间区间上的增量是相互独立的。
\item[(4)] $W(T)$ 是一个正态分布的随机变量。
\end{enumerate}
\begin{enumerate}
\item[A.]  1句。
\item[B.]  2句。
\item[C.]  3句。
\item[D.]  4句。
\end{enumerate}

解答：D. 
这是维纳过程的定义。


\item  %14
下述程序模拟了标准维纳过程的一些样本路径。不正确的说法是哪个？
\begin{python}
import numpy as np
import numpy.random as npr
T=1; N=100; M=5
t,dt=np.linspace(0,T,N+1,retstep=True) 
dW=npr.normal(0.0,np.sqrt(dt),(M,N+1))
dW[:,0]=0.0
W=np.cumsum(dW,axis=1)
import matplotlib.pyplot as plt 
fig=plt.figure()
ax=fig.add_subplot(111)
for k in range(M):
    ax.plot(t,W[k,:],'--')
\end{python}

\begin{enumerate}
\item[A.]  这个程序将时间区间[0,1]分成了100等分。 
\item[B.]  每个小区间上的增量都是标准正态分布的随机数。
\item[C.]  通过累加函数 np.cumsum 得到了标准维纳过程的样本路径。
\item[D.]  Numpy 模块里的多维数组在这里发挥了重要的作用。
\end{enumerate}

解答：B. 
每个小区间上的增量都是均值为零，方差的时间区间长度的正态分布的随机数。


\item  %15
设 $\{W(t),0\le t\le T\}$ 是标准维纳过程，有关伊藤积分 $\int_0^T W(t)dW(t)$ 的说法，不正确的是哪个？

\begin{enumerate}
\item[A.]  这个积分的结果是 $\frac{1}{2}(W(T)^2-T)$, 这是一个随机变量。
\item[B.]  将区间 $[0,T]$ 划分成很多小区间，按照黎曼-斯蒂尔杰斯积分的方式求和，其中在每个小区间里取左端点。
\item[C.]  对每个划分，得到的黎曼和是一个随机变量。当划分变细的时候，得到一个随机变量的序列。
\item[D.]  这个积分的这些随机变量在绝对收敛的意义下存在的。
\end{enumerate}

解答：D. 
这个积分的这些随机变量在均方收敛的意义下存在的。


\item  %16
关于随机微分方程 $dX(t) = aX(t)dt + \sigma X(t)dW(t), \,\, X(0)=X_0$,下述说法中，不正确的是哪个？

\begin{enumerate}
\item[A.]  这个随机微分方程的解析解是 $X(t)=X_0\exp[(a-\sigma^2/2)t+\sigma W(t)]$ , 这个随机过程称为几何布朗运动。
\item[B.]  给定标准维纳过程 $\{W(t),t\ge 0\}$ 的一条样本路径，能得到随机过程 $\{X(t),t\ge 0\}$ 的很多条样本路径。
\item[C.]  这个随机微分方程的真正含义是其对应的积分方程 $$X(t)=X_0+\int_0^taX(s)ds + \int_0^t \sigma X(s)dW(s).$$
\item[D.]  欧拉-丸山数值方法的思路是使用迭代公式 $$X_{k+1}=X_k+aX_k(t_{k+1}-t_k) + \sigma X_k [W(t_{k+1})-W(t_k)], k\ge 0, $$ 
其中在每个小区间，积分函数都使用了左端点的函数值。
\end{enumerate}

解答：B. 
从标准维纳过程 $\{W(t),t\ge 0\}$ 的一条样本路径，都能唯一得到随机过程 $\{X(t),t\ge 0\}$ 的一条样本路径。


\end{enumerate}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\newpage
%%\setcounter{section}{0}
%
%\section{偏微分方程} %第9章：
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\subsection{学习目标}
%\begin{itemize}
%\item  理解偏微分方程的初边值问题。
%\item  使用直线法、有限差分方法和谱方法求数值解。
%\end{itemize}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
%\setcounter{section}{0}

\section{傅立叶变换与图像压缩} %案例分析

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{学习目标}
\begin{itemize}
\item  理解傅立叶变换的离散形式。
\item  使用DFT压缩一个简单的图像，了解JPEG格式的存储原理。
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{本章练习}
\begin{enumerate}

\item  %17
将奇函数 $f(x)=\left\{ \begin{array}{ll} -1, & -\pi<x<0 \\ 0, & x=0 \\ 1, & 0<x<\pi  \end{array}\right.$ 展开成傅立叶级数，则 $\sin(3x)$ 前面的系数是多少？
\begin{enumerate}
\item[A.]  $1/3$
\item[B.]  $4/3$
\item[C.]  $1/(3\pi)$
\item[D.]  $4/(3\pi)$
\end{enumerate}

解答：D. 
这是奇函数，所以展开成正弦级数。系数的计算公式为
$$
b_3 = \frac{\langle f(x), \sin(3x) \rangle}{\langle \sin(3x), \sin(3x) \rangle} 
= \frac{\int_{-\pi}^{\pi} f(x)\sin(3x)dx}{\int_{-\pi}^{\pi} \sin(3x)\sin(3x)dx} = \frac{4}{3\pi}. 
$$


\item  %18
下述程序画出一个奇函数和它的正弦函数展开，哪一行程序有错误？
\begin{python}
import numpy as np #1
import matplotlib.pyplot as plt #2
x=np.linspace(-np.pi, np.pi, 101) #3
y=np.ones_like(x) #4
y[x<0]=-1 #5
y1=(np.sin(x)+np.sin(3*x)/3+np.sin(5*x)/5+np.sin(7*x)/7)/4/np.pi #6
fig=plt.figure() #7
ax=fig.add_subplot(111) #8
ax.plot(x,y,'b-',lw=2) #9
ax.plot(x,y1,'r-',lw=2) #10
\end{python}

\begin{enumerate}
\item[A.]  第5行。
\item[B.]  第6行。
\item[C.]  第8行。
\item[D.]  第9行。
\end{enumerate}

解答：B. 
按照傅立叶级数的展开公式，把第6行程序里的除以4改成乘以4. 


\item  %19
设 $f(x)$ 是定义在整个实数轴上的实值函数，设它是绝对可积的。 
函数 $f(x)$ 的傅立叶变换是指 $$g(t)=\frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} f(x)e^{-itx}dx,$$ 也经常记为 $\hat{f}(t)$. 下述说法中，不正确的是哪个？
\begin{enumerate}
\item[A.]  因为 $f(x)$ 是绝对可积的，所以它的傅立叶变换 $\hat{f}(t)$ 对任意实数 $t$ 都是有定义的。
\item[B.]  实值函数的傅立叶变换是个复数取值的函数。
\item[C.]  若 $f(x)$ 是绝对可积的连续函数，则 $\hat{f}(t)$ 的傅立叶逆变换也是存在的。
\item[D.]  若 $f(x)$ 是绝对可积的连续函数，则有恒等式 
$$ f(x) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} \hat{f}(t)e^{-itx}dt.$$ 
\end{enumerate}

解答：D. 
若 $f(x)$ 是绝对可积的连续函数，则有傅立叶逆变换的公式 
$$ f(x) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} \hat{f}(t)e^{itx}dt.$$ 
这里的连续函数的条件可以减弱。


\item  %20
关于离散余弦变换 $g(t) = \sum\limits_{x=0}^{N-1} c(t,x)f(x)$，下述说法中，不正确的是哪个？
\begin{enumerate}
\item[A.]  离散余弦变换将一个长度为 $N$ 的序列 $[f(0),f(1),\cdots,f(N-1)]$ 变成另一个同样长度的序列 $[g(0),g(1),\cdots,g(N-1)]$. 
\item[B.]  离散余弦变换把实数序列变成实数序列。
\item[C.]  离散余弦变换中的系数 $c(t,x)$ 组成一个正交矩阵。
\item[D.]  离散余弦变换中的系数为 $c(t,x)=\sqrt{\frac{2}{N}}\cos\frac{t(2x+1)\pi}{2N}$.
\end{enumerate}

解答：D. 
矩阵 $c(t,x)$ 对应于 $t=0$ 的那一行的系数略有不同。要把 $\sqrt{\frac{2}{N}}$ 改成 $\sqrt{\frac{1}{N}}$. 


\item  %21
下述程序定义了 $N=8$ 时的离散余弦变换的系数矩阵。下述说法中，不正确的是哪一句？
\begin{python}
import numpy as np   #1
import matplotlib.pyplot as plt   #2
a=[np.sqrt(1/8)]   #3
a.extend(np.sqrt(2/8)*np.ones(7))   #4
A=np.zeros((8,8))   #5
for t in range(8):   #6
    for x in range(8):   #7
        A[t,x]=a[t]*np.cos(np.pi*(2*x+1)*t/16)   #8
np.set_printoptions(precision=2)   #9
np.round(np.dot(A,A.T),decimals=2)   #10
plt.subplot(811)   #11
plt.plot(A[0,:],'b--.',lw=2)   #12
\end{python}
\begin{enumerate}
\item[A.]  第3行定义一个列表，其中只有一个元素，第4行附加其余7个元素。
\item[B.]  第6-8行用循环语句生成变换矩阵。
\item[C.]  第9行是设置计算结果精确到2位小数。
\item[D.]  第10行是验证矩阵A是一个正交矩阵。
\end{enumerate}

解答：C. 
第9行是设置结果只显示2位小数，计算仍然是精确到很多位小数的。


\item  %22
关于二维离散余弦变换，下述说法中，不正确的是哪个？

\begin{enumerate}
\item[A.]  二维离散余弦变换将一个正方形数组变成另一个正方形数组。
\item[B.]  二维离散余弦变换等价于进行两次一维离散余弦变换。
\item[C.]  二维离散余弦变换可以概括记为 $Y=CXC^t$. 其中 $X$ 是输入数据矩阵，$Y$ 是输出数据矩阵，$C$ 是一维离散余弦变换的正交矩阵。
\item[D.]  二维离散余弦变换的逆变换不一定存在。
\end{enumerate}

解答：D. 
二维离散余弦变换的逆变换总是存在的，它就是 $X=C^tYC$. 


\item  %23
数据矩阵 $F$ 经过量子化尺度 $Q$ 之后得到矩阵 $F_Q$, 这个矩阵的非零元素一共有多少个？
\begin{eqnarray*}
F=\begin{bmatrix} 236&-1&-12&-5 \\ -23&-17&-6&-3 \\ -11&-9&-2&2 \\ -7&-2&0&2 \end{bmatrix}, \,\,\,
Q=\begin{bmatrix} 16&11&10&16 \\ 12&12&14&19 \\ 14&13&16&24 \\ 14&17&22&29 \end{bmatrix}.
\end{eqnarray*}

\begin{enumerate}
\item[A.]  5个。
\item[B.]  6个。
\item[C.]  7个。
\item[D.]  8个。
\end{enumerate}

解答：B. 
按照量子化过程的定义，分量对应相除，然后取最接近的整数，可得16个位置中，共有6个非零元素。
\begin{python}
import numpy as np
F=np.array([
       [236,-1,-12,-5], 
       [-23,-17,-6,-3],
       [-11,-9,-2,2],
       [-7,-2,0,2] 
       ])
Q=np.array([
        [16,11,10,16],
        [12,12,14,19],
        [14,13,16,24],
        [14,17,22,29]
        ])
F_Q=np.round(F/Q,0)
F_Q[F_Q==-0.]=0.
print(F_Q)
\end{python}


\item  %24
用JPG格式保存图像，下述哪个步骤有问题？
\begin{enumerate}
\item[(1)]  将图像划分成小块，对每块进行二维离散余弦变换，得到频域数据。
\item[(2)]  对变换后的频域数据，用量子化处理，保留主要信息。
\item[(3)]  用熵编码方式保存图像。
\item[(4)]  打开图像的时候，用熵解码重建频域数据。
\item[(5)]  对频域数据，用二维离散余弦变换的逆变换重建图像。
\end{enumerate}
\begin{enumerate}
\item[A.]  第2步。
\item[B.]  第3步。
\item[C.]  第4步。
\item[D.]  第5步。
\end{enumerate}

解答：C. 
打开图像的时候，用熵解码，以及逆量子化处理，得到简化的频域数据。



\item  %25
下述哪个文献与图像压缩技术没有直接联系？

\begin{enumerate}
\item[A.]  Gregory K. Wallace. The JPEG Still Picture Compression Standard.
\item[B.]  Andrew B. Watson. Image Compression Using the Discrete Cosine Transform.
\item[C.]  Frederic Edwin Church. Heart of the Andes.
\item[D.]  David S. Taubman, Michael W. Marcellin. JPEG 2000: Image Compression Fundamentals, Standards and Practice.
\end{enumerate}
 
解答：C. 
你也许可以压缩这幅画。




\end{enumerate}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
%\setcounter{section}{0}

\section{神经网络模型发展历史} %案例分析

\subsection{神经网络模型介绍}
\begin{itemize}
\item 1989年：手写数字识别，卷积神经网络。
\item 2012年：图像识别。
\item 2017年：Transformer模型。
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{数据集}
\begin{enumerate}

\item Microsoft. Azure open datasets. \\ 
\url{https://learn.microsoft.com/zh-cn/azure/open-datasets/}

\item Yann Lecun. MNIST database. 
\url{http://yann.lecun.com/exdb/mnist/}

\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
%\setcounter{section}{0}

\section{神经网络微分方程数值解} %案例分析


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\end{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{enumerate}
\item[A.]  
\item[B.]  
\item[C.]  
\item[D.]  
\end{enumerate}
